package com.midea.leetcode;

/**
 * @description：买卖股票的最佳时机
 * @author: wangwl23
 * @create: 2022-02-10 16:29
 */
public class maxProfit {
    public static void main(String[] args) {

    }

    /**
     * 初级版:单买单卖
     * 给定一个数组 prices ，它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
     * 你只能选择 某一天 买入这只股票，并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
     * 返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润，返回 0 。
     * @param prices
     * @return
     */
    public int maxProfit(int[] prices) {
        int maxProfit = 0;
        int minPrice = Integer.MAX_VALUE;
        for (int i = 0;i<prices.length;i++){
            if (prices[i]<minPrice){
                minPrice = prices[i];
            }else if (prices[i]-minPrice > maxProfit){
                maxProfit = prices[i] - minPrice;
            }
        }
        return maxProfit;
    }


    /**
     * 进阶版，可以多买多卖
     *prices = [7,1,5,3,6,4]
     *prices = [7,1,5,2,18,4]
     * 给定一个数组 prices ，其中 prices[i] 表示股票第 i 天的价格。
     * 在每一天，你可能会决定购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以购买它，然后在 同一天 出售。
     * 返回 你能获得的 最大 利润 。
     * @param prices
     * @return
     */
    public int maxProfit1(int[] prices) {
        int maxProfit = 0;
        int minPrice = Integer.MAX_VALUE;
        for (int i = 0;i<prices.length;i++){
            if (prices[i]<minPrice){
                minPrice = prices[i];
            }else if (prices[i]-minPrice > maxProfit){
                maxProfit = prices[i] - minPrice;
            }
        }
        return maxProfit;
    }
}
